﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>获取音频设备接口 - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The 获取音频设备接口 function retrieves a native COM interface of a sound device or component." />
<meta name="ahk:equiv-v1" content="commands/SoundGet.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>获取音频设备接口</h1>

<p>检索声音设备或组件的原生 COM 接口.</p>

<pre class="Syntax">InterfacePtr := <span class="func">获取音频设备接口</span>(IID, <span class="optional">Component, Device</span>)</pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>IID</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
    <p>格式为 "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" 的接口标识符(GUID).</p>
  </dd>

  <dt>Component</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a>或<a href="../Concepts.htm#numbers">整数</a></p>
    <p>组件的显示名称和/或索引. 例如, <code>1</code>, <code>"Line in"</code> 或 <code>"Line in:2"</code>.</p>
    <p>如果省略或留空, 则检索由设备本身实现的接口.</p>
    <p>有关详情, 请参阅 <a href="Sound.htm#component">Component (Sound 函数)</a>.</p>
  </dd>

  <dt>Device</dt>
  <dd>
    <p>类型: <a href="../Concepts.htm#strings">字符串</a>或<a href="../Concepts.htm#numbers">整数</a></p>
    <p>设备的显示名称和/或索引. 例如, <code>1</code>, <code>"Speakers"</code>, <code>"Speakers:2"</code> 或 <code>"Speakers (Example HD Audio)"</code>.</p>
    <p>如果省略该参数, 则它默认为系统的默认回放设备(不一定是设备 1).</p>
    <p>有关详情, 请参阅 <a href="Sound.htm#device">Device (Sound 函数)</a>.</p>
  </dd>

</dl>

<h2 id="Return_Value">返回值</h2>
<p>类型: <a href="../Concepts.htm#numbers">整数</a>或<a href="../Concepts.htm#nothing">字符串(空值)</a></p>
<p>如果成功, 返回值是接口指针.</p>
<p>如果失败, 返回值是空字符串.</p>

<h2 id="Error_Handling">错误处理</h2>
<p>失败时抛出异常. 异常对象的 <em>Message</em> 属性可以包含以下内容之一:</p>
<ul>
    <li>Device not found(无法找到设备)</li>
    <li>Component not found(无法找到组件)</li>
    <li>Component doesn't support this control 类型(组件不支持此控件类型)</li>
    <li><em>Subject to change:</em> An internal function call failed.(内部函数调用失败)</li>
</ul>

<h2 id="Remarks">备注</h2>
<p>接口是从以下来源之一检索的:</p>
<ul>
  <li>如果省略 <em>Component</em>, 则调用 <a href="https://docs.microsoft.com/en-us/windows/win32/api/mmdeviceapi/nf-mmdeviceapi-immdevice-activate">IMMDevice::Activate</a> 检索接口.</li>
  <li>为 <em>Component</em> 连接器标识调用 <a href="http://msdn.microsoft.com/en-us/library/ms682521.aspx">QueryInterface</a>, 如果成功, 则返回接口指针. 这可以用于检索连接器的 <a href="https://docs.microsoft.com/en-us/windows/win32/api/devicetopology/nn-devicetopology-ipart">IPart</a> 或 <a href="https://docs.microsoft.com/en-us/windows/win32/api/devicetopology/nn-devicetopology-iconnector">IConnector</a> 接口.</li>
  <li>对于给定 <em>Component</em> 唯一的每个子单元, 都会调用 <a href="https://docs.microsoft.com/en-us/windows/win32/api/devicetopology/nf-devicetopology-ipart-activate">IPart::Activate</a>. 例如, <em>IID</em> 可以是 <code>"{7FB7B48F-531D-44A2-BCB3-5AD5A134B3DC}"</code> 检索 IAudioVolumeLevel 接口, 该接口提供对每个通道音量级别控件的访问.</li>
</ul>
<p>一旦检索到接口指针, 可用 <a href="ComCall.htm">组件调用</a> 来调用它的方法. 参考 Windows SDK 头文件来识别正确的方法索引.</p>
<p>接口指针必须在不再需要时通过传递给 <a href="ObjAddRef.htm">减少对象引用计数</a> 来释放. 这可以通过使用 <a href="ComObject.htm">组件对象</a> "包装" 它来实现. 包装的值(对象) 可以直接传递给 <a href="ComCall.htm">组件调用</a>.</p>
<pre>Interface := 组件对象(13, InterfacePtr)</pre>

<h2 id="Related">相关</h2>
<p><a href="Sound.htm">Sound 函数</a>, <a href="https://docs.microsoft.com/en-us/windows/win32/coreaudio/devicetopology-api">DeviceTopology API</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExPeakMeter">
<p><a href="#ExPeakMeter">#1</a>: 峰值表. 将显示带有当前峰值的工具提示, 但峰值为零时除外(无声音播放).</p>
<pre><em>; IAudioMeterInformation</em>
audioMeter := 获取音频设备接口("{C02216F6-8C67-4B5B-9D00-D008E73E0064}")
如果 audioMeter
{
    try 循环  <em>; 直到脚本退出或发生错误.</em>
    {
        <em>; audioMeter-&gt;GetPeakValue(&amp;peak)</em>
        组件调用 3, audioMeter, "浮点数*", peak:=0
        工具提示 peak &gt; 0 ? peak : ""
        等待 15
    }
    减少对象引用计数 audioMeter
}
否则
    信息框 "Unable to get audio meter"
</pre>
</div>

</body>
</html>